package com.itheima.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.itheima.dao.OrderSettingDao;
import com.itheima.pojo.OrderSetting;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 黑马程序员
 * @Company http://www.ithiema.com
 * @Version 1.0
 */
@Service(interfaceClass = OrderSettingService.class)
@Transactional
public class OrderSettingServiceImpl implements OrderSettingService {

    @Autowired
    OrderSettingDao orderSettingDao;

    /**
     * 1. 遍历集合，添加orderSetting对象
     * 2. 判断是否已经进行预约设置
     *      根据日期查询预约设置，如果能查到，说明已经预约设置，进行更新操作
     *          判断已预约是否大于可预约人数，如果大于可预约人数，提示用户预约设置失败（抛异常）
     *      如果查不到，执行新增操作
     * @param orderSettingList
     */
    @Override
    public void addOrderSettingList(List<OrderSetting> orderSettingList) {
        if(orderSettingList != null && orderSettingList.size() > 0){
            //1. 遍历集合，添加orderSetting对象
            for (OrderSetting orderSetting : orderSettingList) {
                //2.  判断是否已经进行预约设置
                //根据日期查询预约对象
                OrderSetting orderSettingDb = orderSettingDao.findByOrderDate(orderSetting.getOrderDate());
                if(orderSettingDb == null){
                    //如果查不到，执行新增操作
                    orderSettingDao.add(orderSetting);
                }
                else{
                    //如果能查到，说明已经预约设置，进行更新操作
                    //判断已预约(数据库)是否大于可预约人数，如果大于可预约人数，提示用户预约设置失败（抛异常）
                    //数据库中的已预约人数
                    int reservations = orderSettingDb.getReservations();
                    //获取新设置可预约人数
                    int number = orderSetting.getNumber();
                    //大于可预约人数，提示用户预约设置失败（抛异常）
                    if(reservations > number){
                        throw new RuntimeException("已预约人数大于了可预约人数，预约设置失败!!");
                    }else{
                        orderSettingDao.update(orderSetting);
                    }
                }

            }
        }
    }

    /**
     * 查询本月的数据对象： 范围查询：从1号到 31号
     *
     * 2019-6-1
     * 2019-6-31
     * @param month
     * @return
     */
    @Override
    public List<OrderSetting> findByMonth(String month) {
        //拼接1号的日期
        String startDate = month + "-1";
        //拼接31号的日期
        String endDate = month + "-31";

        //创建Map集合参数
        Map<String,Object> map = new HashMap<>();
        map.put("startDate", startDate);
        map.put("endDate", endDate);

        return orderSettingDao.findByMonth(map);
    }
}
